﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Data.Sql;

namespace veterinaria.negocio
{
    public static class GestorMascotas 
    {
        /// <summary>
        /// Para insertar una nueva mascota en la BD.
        /// </summary>
        /// <param name="nombre"> nombre de la mascota</param>
        /// <param name="fechaNacimiento"> fecha de nacimiento de la mascota</param>
        /// <param name="idRaza"> identificador de la raza </param>
        /// <param name="peso"></param>
        /// <param name="altura"></param>
        /// <param name="idDueño">identificador del dueño </param>
        /// <returns></returns>
        //public static int insertar(string nombre, DateTime fecha, int idRaza, float peso, float altura, int idDueño, string accion, int? idHistClinica)
        //{
        //    SqlConnection con = ConexionBaseDeDatos.obtenerConexion();

        //    SqlCommand cmd = new SqlCommand();
        //    cmd.CommandType = CommandType.Text;
        //    cmd.Connection = con;

        //    if ("editarMascota".Equals(accion))
        //    {
        //        cmd.CommandText = "UPDATE Perro SET Nombre=@Nombre, Fecha_Nacimiento=@Fecha_Nacimiento, Id_Raza=@Id_Raza, Peso=@Peso, Altura=@Altura,Id_Dueño=@Id_Dueño WHERE Id_Historia_Clinica=@idHistClinica";
        //        cmd.Parameters.AddWithValue("@idHistClinica", idHistClinica);
        //    }
        //    else if ("nuevaMascota".Equals(accion))
        //    {
        //        cmd.CommandText = "INSERT INTO Perro(Nombre, Fecha_Nacimiento, Id_Raza, Peso, Altura,Id_Dueño) VALUES (@Nombre, @Fecha_Nacimiento, @Id_Raza, @Peso, @Altura,@Id_Dueño)";
        //    }

        //    cmd.Parameters.AddWithValue("@Nombre", nombre);
        //    cmd.Parameters.AddWithValue("@Fecha_Nacimiento", fecha);
        //    cmd.Parameters.AddWithValue("@Id_Raza",idRaza);
        //    cmd.Parameters.AddWithValue("@Peso",peso);
        //    cmd.Parameters.AddWithValue("@Altura",altura);
        //    cmd.Parameters.AddWithValue("@Id_Dueño", idDueño);

        //    int filas = cmd.ExecuteNonQuery();

        //    con.Close();

        //    return filas;
        //}

        /// <summary>
        /// Para insertar un perro.
        /// </summary>
        /// <param name="nombre"></param>
        /// <param name="fecha"></param>
        /// <param name="idRaza"></param>
        /// <param name="peso"></param>
        /// <param name="altura"></param>
        /// <param name="idDueño"></param>
        /// <returns></returns>
        public static int insertar(string nombre, DateTime fecha, int idRaza, float peso, float altura, int idDueño)
        {
            SqlConnection con = ConexionBaseDeDatos.obtenerConexion();

            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.Text;
            cmd.Connection = con;

            cmd.CommandText = "INSERT INTO Perro(Nombre, Fecha_Nacimiento, Id_Raza, Peso, Altura,Id_Dueño) VALUES (@Nombre, @Fecha_Nacimiento, @Id_Raza, @Peso, @Altura,@Id_Dueño)";

            cmd.Parameters.AddWithValue("@Nombre", nombre);
            cmd.Parameters.AddWithValue("@Fecha_Nacimiento", fecha);
            cmd.Parameters.AddWithValue("@Id_Raza", idRaza);
            cmd.Parameters.AddWithValue("@Peso", peso);
            cmd.Parameters.AddWithValue("@Altura", altura);
            cmd.Parameters.AddWithValue("@Id_Dueño", idDueño);

            int filas = cmd.ExecuteNonQuery();

            con.Close();

            return filas;
        }

        /// <summary>
        /// Para modificar un perro.
        /// </summary>
        /// <param name="nombre"></param>
        /// <param name="fecha"></param>
        /// <param name="idRaza"></param>
        /// <param name="peso"></param>
        /// <param name="altura"></param>
        /// <param name="idDueño"></param>
        /// <param name="idHistClinica"></param>
        /// <returns></returns>
        public static int modificar(string nombre, DateTime fecha, int idRaza, float peso, float altura, int idDueño,int idHistClinica)
        {
            SqlConnection con = ConexionBaseDeDatos.obtenerConexion();

            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.Text;
            cmd.Connection = con;

            cmd.CommandText = "UPDATE Perro SET Nombre=@Nombre, Fecha_Nacimiento=@Fecha_Nacimiento, Id_Raza=@Id_Raza, Peso=@Peso, Altura=@Altura,Id_Dueño=@Id_Dueño WHERE Id_Historia_Clinica=@idHistClinica";

            cmd.Parameters.AddWithValue("@idHistClinica", idHistClinica);
            cmd.Parameters.AddWithValue("@Nombre", nombre);
            cmd.Parameters.AddWithValue("@Fecha_Nacimiento", fecha);
            cmd.Parameters.AddWithValue("@Id_Raza", idRaza);
            cmd.Parameters.AddWithValue("@Peso", peso);
            cmd.Parameters.AddWithValue("@Altura", altura);
            cmd.Parameters.AddWithValue("@Id_Dueño", idDueño);

            int filas = cmd.ExecuteNonQuery();

            con.Close();

            return filas;
        }
        
        /// <summary>
        /// Borra un registro de la BD según el id de la historia clínica.
        /// </summary>
        /// <param name="id_Historia_Clinica"></param>
        /// <returns></returns>
        public static int borrar(int id_Historia_Clinica)
        {
            SqlConnection con = ConexionBaseDeDatos.obtenerConexion();

            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.Text;
            cmd.Connection = con;

            cmd.CommandText = "DELETE FROM Perro where Id_Historia_Clinica=@Id_Historia_Clinica";

            cmd.Parameters.AddWithValue("@Id_Historia_Clinica", id_Historia_Clinica);
            
            int filas = cmd.ExecuteNonQuery();
            con.Close();

            return filas;
        }

        /// <summary>
        /// Muestra todos los perros registrados en la BD.
        /// </summary>
        /// <returns></returns>
        public static DataTable verTodos()
        {
            SqlConnection con = ConexionBaseDeDatos.obtenerConexion();

            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.Text;
            cmd.Connection = con;

            cmd.CommandText = "SELECT P.Id_Historia_Clinica AS 'Código', P.Nombre AS 'Nombre',P.Fecha_Nacimiento AS 'Fecha', R.Denominacion AS 'Raza', P.Peso AS 'Peso',P.Altura AS 'Altura', D.Apellido AS 'Dueño' FROM Perro P INNER JOIN Raza R ON P.Id_Raza=R.Id_Raza INNER JOIN Dueño D ON P.Id_Dueño= D.Id_Dueño";

            DataTable dt = new DataTable();

            dt.Load(cmd.ExecuteReader());

            con.Close();

            return dt;
        }

        //TODO Búsqueda con filtro.

        public static DataTable verPerrosConFiltros(int? idRaza, int? idHistoriaClinica, int? idDueño)
        {
            SqlConnection con = ConexionBaseDeDatos.obtenerConexion();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;

            string text = "SELECT P.Id_Historia_Clinica AS 'Código', P.Nombre AS 'Nombre', R.Denominacion AS 'Raza', P.Peso AS 'Peso', P.Altura AS 'Altura', D.Apellido AS 'Dueño', P.Fecha_Nacimiento AS 'Fecha', D.Id_Dueño AS 'IdDueño', R.Id_Raza AS 'IdRaza' FROM Perro P INNER JOIN Raza R ON P.Id_Raza=R.Id_Raza INNER JOIN Dueño D ON P.Id_Dueño= D.Id_Dueño WHERE 1=1";

            if (idRaza != null)
            {
                text += " AND R.Id_Raza=@idRaza";
                cmd.Parameters.AddWithValue("@idRaza",idRaza);
            }
            if (idHistoriaClinica!=null)
            {
                text += " AND P.Id_Historia_Clinica=@idHistoriaClinica";
                cmd.Parameters.AddWithValue("@idHistoriaClinica", idHistoriaClinica);
            }
            if (idDueño.HasValue)
            {
                text += " AND D.Id_Dueño=@idDueño";
                cmd.Parameters.AddWithValue("@idDueño", idDueño);
            }

            cmd.CommandText = text;

            DataTable dt = new DataTable();
            dt.Load(cmd.ExecuteReader());

            return dt;
        }


          //--------------------------------------//
         //-------- MÉTODOS AUXILIARES ----------//
        //--------------------------------------//

        /// <summary>
        /// Para llenar los combos de las razas.
        /// </summary>
        /// <returns> Datatable con los id y el nombre de las razas </returns>
        public static DataTable getRazas()
        {
            SqlConnection con = ConexionBaseDeDatos.obtenerConexion();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;

            cmd.CommandText = "SELECT Id_Raza, Denominacion FROM Raza";

            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;

            DataTable dt = new DataTable();

            da.Fill(dt);

            con.Close();

            return dt;
        }

        /// <summary>
        /// Para lenar los combos de los dueños.
        /// </summary>
        /// <returns></returns>
        public static DataTable getDueños()
        {
            SqlConnection con = ConexionBaseDeDatos.obtenerConexion();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;

            cmd.CommandText = "SELECT Id_Dueño, Apellido FROM Dueño";

            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;

            DataTable dt = new DataTable();

            da.Fill(dt);

            con.Close();

            return dt;
        }


    }

}
